////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  chituningmodeparam.h
/// @brief CamX Hardware Interface (CHI) Override definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CHITUNINGMODEPARAM_H
#define CHITUNINGMODEPARAM_H

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

static const UINT32 MaxTuningMode  = 7;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class ChiModeType
{
    Default  = 0,
    Sensor   = 1,
    Usecase  = 2,
    Feature1 = 3,
    Feature2 = 4,
    Scene    = 5,
    Effect   = 6
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeUsecaseSubModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class ChiModeUsecaseSubModeType
{
    Preview  = 0,
    Snapshot = 1,
    Video    = 2,
    ZSL      = 3,
    Liveshot = 4
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeFeature1SubModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class ChiModeFeature1SubModeType
{
    None   = 0,
    ISPHDR = 1,
    ADRC   = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeFeature2SubModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class ChiModeFeature2SubModeType
{
    None           = 0,
    OISCapture     = 1,
    HLG            = 2,
    HDR10          = 3,
    MFNRBlend      = 4,
    MFNRPostFilter = 5,
    MFSRBlend      = 6,
    MFSRPostFilter = 7,
    FLASH          = 8
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeSceneSubModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class ChiModeSceneSubModeType
{
    None          = 0,
    Landscape     = 1,
    Snow          = 2,
    Beach         = 3,
    Sunset        = 4,
    Night         = 5,
    Portrait      = 6,
    BackLight     = 7,
    Sports        = 8,
    AntiShake     = 9,
    Flowers       = 10,
    CandleLight   = 11,
    Fireworks     = 12,
    Party         = 13,
    NightPortrait = 14,
    Theater       = 15,
    Action        = 16,
    AR            = 17,
    FacePriority  = 18,
    Barcode       = 19,
    BestShot      = 20
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeEffectSubModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class ChiModeEffectSubModeType
{
    None      = 0,
    Mono      = 1,
    Sepia     = 2,
    Negative  = 3,
    Solarize  = 4,
    Posterize = 5,
    Aqua      = 6,
    Emboss    = 7,
    Sketch    = 8,
    Neon      = 9,
    Blackboard= 10,
    Whiteboard= 11
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ModeSubModeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
union ChiModeSubModeType
{
    UINT16                     value;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// usecase
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeUsecaseSubModeType  usecase;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// feature1
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeFeature1SubModeType feature1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// feature2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeFeature2SubModeType feature2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// scene
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeSceneSubModeType    scene;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// effect
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeEffectSubModeType   effect;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// TuningMode
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct ChiTuningMode
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mode
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeType        mode;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// subMode
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ChiModeSubModeType subMode;
};

struct ChiTuningModeParameter
{
    UINT32         noOfSelectionParameter;
    ChiTuningMode  TuningMode[MaxTuningMode];
};

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // CHITUNINGMODEPARAM_H
